package com.cs.beneficios.web.action;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.beneficios.common.entity.Consultas;
import com.cs.paoyer.administration.business.model.UserVO;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
//import org.apache.struts.action.ActionError;
//import org.apache.struts.action.ActionErrors;
import java.io.IOException;
import javax.servlet.ServletException;

public class AdicionarAtributoAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
     //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
	 ConnectionFactory cf = new ConnectionFactory();
     Consultas objCons = new Consultas(cf);
     try{
         String strTipo= request.getParameter("accion");
         int numero=Integer.parseInt(strTipo.trim());
         List lNombre;
         List lError;
         List lConvertirGene;
         Collection coInsertarAtri;
         List lCamposOblig;
         HttpSession session = request.getSession();
         
          //Proceso para la auditoria
          UserVO user = (UserVO)session.getAttribute("userInfo");
          String terminalAddress = request.getRemoteAddr();
          String strTerminal = ("WEB="+terminalAddress);
          Calendar ca = Calendar.getInstance(); 
          SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
          //Fin del proceso
        
         String sub = (String)session.getAttribute("subprograma");
         
         if(numero!=2)
         {
            lNombre = new LinkedList();
            lError = new LinkedList();
            lConvertirGene = new LinkedList();
            coInsertarAtri = new LinkedList();
            lCamposOblig = new LinkedList();
         }else
         {
            lNombre = (List)session.getAttribute("ListaNombre");
            lError = (List)session.getAttribute("ListaError");  
            lConvertirGene = (List)session.getAttribute("ListaConvertir");
            coInsertarAtri = (Collection)session.getAttribute("ListaAtributos");
            lCamposOblig = (List)session.getAttribute("ListaCamposObli");
         }
         
         
         if(numero!=2)
         {
             Collection c = objCons.getAtributoGenerico(sub);
             int iTamano=c.size();
                 
             for (int i=1;i<=iTamano;i++)
             {
                 String strCodigoAtriGen = request.getParameter("opcion"+i);
                     
                 if(strCodigoAtriGen!=null)
                 {
                    String strArr2[] = {user.getName(), dateFormat.format(ca.getTime()),strTerminal,user.getName(),dateFormat.format(ca.getTime()),strTerminal};
                      
                    int InsertAtriGenerico= objCons.InsertAtributoGenerico(strCodigoAtriGen,sub,strArr2);
                 }
                 session.setAttribute("Mostrar","1");
             }
         }
         
         AtributoVO objatri = null;
         
         for(int i=1;i<6;i++)
         {
            int sw = 0;
            List lComparacion = new LinkedList();
              
            //Proceso para validar los campos obligatorios
            Object obNombre = (Object)request.getParameter("nombre"+i);
            if(!obNombre.equals(""))
            {
              lComparacion.add(obNombre);
            }
            Object obOrden = (Object)request.getParameter("orden"+i);
            if(!obOrden.equals(""))
            {
              lComparacion.add(obOrden);
            }
            Object obEtiqueta = (Object)request.getParameter("etiqueta"+i);
            if(!obEtiqueta.equals(""))
            {
              lComparacion.add(obEtiqueta);
            }
            Object obDescrip = (Object)request.getParameter("descripcion"+i);
            if(!obDescrip.equals(""))
            {
              lComparacion.add(obDescrip);
            }
            
            int icompara = lComparacion.size();
            if(icompara==0)
            {
              Object oblong = (Object)request.getParameter("longitud"+i);
              if(!oblong.equals(""))
              {
                lComparacion.add(oblong);
              }
            }
              
            int icomparacion = lComparacion.size();
            if(icomparacion==0 || icomparacion==4)
            {
               String strNombre = request.getParameter("nombre"+i);
               String strOrden = request.getParameter("orden"+i);
               String strEtiqueta = request.getParameter("etiqueta"+i); 
               
               if(!strOrden.equals("") && !strNombre.equals(""))
               {
                 int iOrdenMin=Integer.valueOf(strOrden).intValue();
                 if(iOrdenMin >299)
                 {
                    Object obListaAtri = (Object)session.getAttribute("ListaAtributos");
                    Object obConvertir = (Object)request.getParameter("convertir"+i);
                    AtributoVO objAtriVO = null;
                    //valido que si es la primera vez no entre
                    if(obListaAtri!=null)
                    {  
                      List lListaAtributos = (List)session.getAttribute("ListaAtributos");
                      int tamanolistaatri = lListaAtributos.size();
                      for(int j=0;j<tamanolistaatri;j++)
                      {
                         objAtriVO = (AtributoVO)lListaAtributos.get(j);
                         String strnomcom = objAtriVO.getNombre();
                         String strordencom = objAtriVO.getOrden();
                         // Proceso para validar que el orden y el nombre sean diferentes
                         if(strNombre.equals(strnomcom) || strOrden.equals(strordencom))
                         {
                           sw = 1;
                           session.setAttribute("Mostrar","3");
                           lError.add(strEtiqueta);
                           lError.add(strOrden);
                         }
                       }
                    }
                    // fin del proceso
                        
                   if(!strNombre.equalsIgnoreCase("") && sw==0)
                   {
                      objatri = new AtributoVO();
                      objatri.setTipoatributo(request.getParameter("tipo_atributo"+i));;
                      objatri.setNombre(request.getParameter("nombre"+i));
                      objatri.setOrden(request.getParameter("orden"+i));
                      objatri.setLongitud(request.getParameter("longitud"+i));
                      objatri.setObligatorio(request.getParameter("obligatorio"+i));
                      objatri.setEtiqueta(request.getParameter("etiqueta"+i));
                      objatri.setValLista(request.getParameter("validar_lista"+i));
                      objatri.setDescripcion(request.getParameter("descripcion"+i));
                      objatri.setTipodato(request.getParameter("tipo_dato"+i));
                      coInsertarAtri.add(objatri);
                   //   lNombre.add(request.getParameter("nombre"+i));
                 
                      int Orden = objCons.getOrden(objatri.getOrden(),sub);
                      if (Orden == 0)
                      {
                         if(obConvertir!=null)
                         {
                            lConvertirGene.add(request.getParameter("nombre"+i));
                         }
                      }else
                      {
                         session.setAttribute("Mostrar","3");
                         Object obError = (Object)lError;
                         if(!obError.equals("0"))
                         {
                             lError.add(objAtriVO.getEtiqueta());
                             lError.add(strOrden);
                         }
                       }
                   }
                   //envio la lista donde almaceno los atributos a ingresar
                   session.setAttribute("ListaAtributos",coInsertarAtri);
                 }else
                 {
                    session.setAttribute("Mostrar","3");
                    lError.add(strEtiqueta);
                    lError.add(strOrden);
                 }
               }
               session.setAttribute("ListaConvertir",lConvertirGene);
            }else
            {
                session.setAttribute("Mostrar","3");
                session.setAttribute("TipoError","2");
                
                 int sw1=0;
                 if(!(request.getParameter("etiqueta"+i)).equals("") && sw1==0)
                 {
                   lCamposOblig.add(request.getParameter("etiqueta"+i));
                   sw1=1;
                 }
                 if(!(request.getParameter("nombre"+i)).equals("") && sw1==0)
                 {
                   lCamposOblig.add(request.getParameter("nombre"+i));
                   sw1=1;
                 }
                 if(!(request.getParameter("descripcion"+i)).equals("") && sw1==0)
                 {
                   lCamposOblig.add(request.getParameter("descripcion"+i));
                   sw1=1;
                 }
                 if(!(request.getParameter("orden"+i)).equals("") && sw1==0)
                 {
                   lCamposOblig.add(request.getParameter("orden"+i));
                   sw1=1;
                 }
                 
                 session.setAttribute("ListaCamposObli",lCamposOblig);
            }
         }
          
         if(((Object)lError)!=null)
         {
           int iTamanoError = lError.size();
           if (iTamanoError != 0)
           {
              session.setAttribute("ListaError",lError);
           }
           String strtamerror=String.valueOf(iTamanoError);
           session.setAttribute("TamanoError",strtamerror);
          
           session.setAttribute("ListaNombre",lNombre);
           int iTamanoValidar=lNombre.size();
           if (iTamanoValidar!=0)
           {
              Collection val = objCons.getAtriValidarLista(lNombre,sub); 
              request.setAttribute("tamano",val.size()+"");
              request.setAttribute("dominios",val);
           }
         }
     }finally
      {
        try{
          cf.closeConnection(objCons.getConn());
        }catch(SQLException e)
        {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSSPE - cwsub ********/");
        }
      }
     return mapping.findForward("success");
  }
}